package com.netflexitysolutions.amazonws.ec2;

import java.util.List;
import java.util.Set;

import com.amazonaws.ec2.doc._2009_04_04.AmazonEC2PortType;
import com.netflexitysolutions.amazonws.ec2.internal.operations.ExperimantalDescribeInstancesOperation;

public class RestEC2Client implements EC2, RestEC2ServiceFactory {
	
	RestEC2Service service;
	
	public RestEC2Client(String awsAccessId, String awsSecretKey, boolean isSecure,
            String server) {
		service = new RestEC2ServiceImpl(awsAccessId, awsSecretKey, isSecure, server, 80);
	}
	
	@Override
	public boolean addLaunchPermission(String imageId,
			LaunchPermission permission) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean addLaunchPermissions(String imageId,
			List<LaunchPermission> permissions) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String allocateAddress() throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean associateAddress(String instanceId, String publicIp)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public AttachmentInfo attachVolume(String volumeId, String instanceId,
			String device) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean authorizeSecurityGroupIngress(String userId,
			String groupName, String secGroupName, String secGroupOwnerId)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean authorizeSecurityGroupIngress(String userId,
			String groupName, IPProtocol ipProtocol, int fromPort, int toPort,
			String cidrIp) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public BundleInstanceInfo bundleInstance(String instanceId,
			String bucketId, String prefix, String awsAccessKeyId,
			String awsSecretKey) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public BundleInstanceInfo cancelBundleTask(String bundleId)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String confirmProductInstance(String productCode, String instanceId)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public KeyPair createKeyPair(String keyName) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean createSecurityGroup(String name, String description)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Snapshot createSnapshot(String volumeId) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Volume createVolume(int size, String availabilityZoneName)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Volume createVolume(String snapshotId, String availabilityZoneName)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean deleteKeyPair(String keyName) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean deleteSecurityGroup(String name) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean deleteSnapshot(String snapshotId) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean deleteVolume(String volumeId) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean deregisterImage(String imageId) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public List<Address> describeAddresses() throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Address> describeAddresses(Set<String> publicIps)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<AvailabilityZone> describeAvailabilityZones()
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<AvailabilityZone> describeAvailabilityZones(
			Set<String> zoneNames) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<BundleInstanceInfo> describeBundleTasks() throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<BundleInstanceInfo> describeBundleTasks(Set<String> bundleIds)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<ImageDescription> describeImages(Set<String> imageIds,
			Set<String> ownedBy, Set<String> executableBy) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public RunningInstance describeInstance(String instanceId)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<RunningInstance> describeInstances(Set<String> instanceIds)
			throws EC2Exception {
		ExperimantalDescribeInstancesOperation operation = new ExperimantalDescribeInstancesOperation(this, instanceIds);
		return operation.execute();
	}

	@Override
	public List<KeyPair> describeKeyPairs() throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<KeyPair> describeKeyPairs(Set<String> keyNames)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Region> describeRegions() throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Region> describeRegions(Set<String> regionNames)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<ReservedInstances> describeReservedInstances(
			Set<String> instanceIds) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<ReservedInstancesOffering> describeReservedInstancesOfferings(
			Set<String> instancesOfferingIds, InstanceType instanceType,
			String availabilityZone, String productDescription)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<SecurityGroup> describeSecurityGroups() throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<SecurityGroup> describeSecurityGroups(Set<String> groupNames)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Snapshot> describeSnapshots() throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Snapshot> describeSnapshots(Set<String> snapshotIds)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Volume> describeVolumes() throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Volume> describeVolumes(Set<String> volumeIds)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public AttachmentInfo detachVolume(String volumeId, String instanceId,
			String device) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public AttachmentInfo detachVolume(String volumeId, String instanceId,
			String device, boolean force) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean disassociateAddress(String publicIp) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public List<BlockDeviceMapping> getBlockDeviceMappings(String imageId)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ConsoleOutput getConsoleOutput(String instanceId)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<LaunchPermission> getLaunchPermitions(String imageId)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<String> getProductCodes(String imageId) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public AmazonEC2PortType getService() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getSimpleAttribute(String imageId,
			ImageSimpleAttributeType attribute) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public InstanceMonitoringInfo monitorInstance(String instanceId)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<InstanceMonitoringInfo> monitorInstances(Set<String> instanceIds)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String purchaseReservedInstancesOffering(
			String reservedInstancesOfferingId) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String purchaseReservedInstancesOffering(
			String reservedInstancesOfferingId, int instanceCount)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean rebootInstances(Set<String> instanceIds) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String registerImage(String pathToImage) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean releaseAddress(String publicIp) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean removeLaunchPermission(String imageId,
			LaunchPermission permission) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean removeLaunchPermissions(String imageId,
			List<LaunchPermission> permissions) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean resetImageAttribute(String imageId,
			ImageAttributeType attribute) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean revokeSecurityGroupIngress(String userId, String groupName,
			IPProtocol ipProtocol, int fromPort, int toPort, String cidrIp)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean revokeSecurityGroupIngress(String userId, String groupName,
			String secGroupName, String secGroupOwnerId) throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public List<RunningInstance> runInstances(InstanceStartupParameters params)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean setProductCode(String imageId, String productCode)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public InstanceTerminationResult terminateInstance(String instanceId)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<InstanceTerminationResult> terminateInstances(
			Set<String> instanceIds) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public InstanceMonitoringInfo unmonitorInstance(String instanceId)
			throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<InstanceMonitoringInfo> unmonitorInstances(
			Set<String> instanceIds) throws EC2Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public RestEC2Service getRestService() {
		// TODO Auto-generated method stub
		return service;
	}

}
